"""
定义服务于openid加解密的类
"""

from itsdangerous import TimedJSONWebSignatureSerializer
from django.conf import settings

class SecretOAuth(object):

    def __init__(self, secret_key=None):
        # 在初始化方法中定义用于加密的serializer对象
        self.serializer = TimedJSONWebSignatureSerializer(
            secret_key=secret_key or settings.SECRET_KEY,
            expires_in=14*24*60
        )

    # 加密
    def dumps(self, data):
        """
        功能是使用self.serializer来加密数据
        :param data: 原数据 —— 一个字典
        :return: 返回加密后的字符串
        """
        byte_data = self.serializer.dumps(data) # 加密后是一个字节
        return byte_data.decode() # 转码成密文字符串返回

    # 解密
    def loads(self, secret_data):
        """
        功能：解密数据
        :param secret_data: 密文的字符串数据
        :return: 解密后的原字典数据 or None
        """
        try:
            data = self.serializer.loads(secret_data)
        except Exception as e:
            print(e)
            # 解密失败，有可能是过期，也有可能是伪造的数据
            return None
        # 解密后返回原字典数据
        return data